/**
 * 映射和元组
 */
object chapter4 {

  def main(args: Array[String]): Unit = {

    // 映射
    val scores = Map("Alick" -> 10, "Blob" -> 20, "Cindy" -> 30)  // 不可变Map[String, Int]
    val newScores = scala.collection.mutable.Map("Alick" -> 10, "Blob" -> 20)  // 可变Map
    val emptyScores = scala.collection.mutable.Map[String, Int]()  // 空映射必须设定类型
    val blobScore = scores.getOrElse("Blob", 0)
    val scores1 = scores.withDefaultValue(0)  // 给不可变映射设定一个默认值(取不存在的值时返回)
    val scores2 = scores.withDefault(_.length)  // 设置默认值，返回键的长度
    // 更新值
    newScores += ("Bob" -> 10, "Fred" -> 34)  // 添加键值
    newScores -= "Alick"  // 移除键
    // 迭代
    for (v <- scores.values) print(v)
    // 默认映射以 哈希表 形式存储，需要顺序则可使用 平衡树
    val treeScores = scala.collection.immutable.SortedMap("Alick" -> 10, "Fred" -> 7, "Bob" -> 3, "Cindy" -> 8)
    // 按照插入顺序访问所有键 LinkedHashMap
    val months = scala.collection.mutable.LinkedHashMap("January" -> 1, "February" -> 2, "March" -> 3)

    // 元组
    val t = (1, 3.14, "test")
    val second = t._2  // 访问元组元素(从 1 开始)
//    val second2 = t _2
    // 拉链操作
    val symbols = Array("<", "-", ">")
    val counts = Array(2, 10, 2)
    val pairs = symbols.zip(counts)  // 转换为 元组: ("<", 2)...
    val maps = symbols.zip(counts).toMap  // 转换为 Map ("<" -> 2)

  }

}
